home *** CD-ROM | disk | FTP | other *** search
- dseg
- xref _prng_state
- xref _modtable
-
- cseg
- xdef _init_prng
- xdef _prng
- xdef _check_hl
- xdef _mirror
-
- _init_prng: move.l 4(sp),d0
- move.l d0,d1
- not.l d1
- movem.l d0-d1,_prng_state
- _prng: movem.l d2-d3,-(sp)
- movem.l _prng_state,d0-d1
- andi.b #$0e,d0
- ori.b #$20,d0
- move.l d0,d2
- move.l d1,d3
- add.l d2,d2
- addx.l d3,d3
- add.l d2,d0
- addx.l d3,d1
- swap d3
- swap d2
- move.w d2,d3
- clr.w d2
- add.l d2,d0
- addx.l d3,d1
- movem.l d0-d1,_prng_state
- moveq #0,d0
- swap d1
- move.w d1,d0
- divu #9999,d0
- clr.w d0
- swap d0
- movem.l (sp)+,d2-d3
- rts
-
- _check_hl: movem.l d2-d4,-(sp)
- swap d0
- or.w d1,d0
- move.l d0,d1
- not.l d1
-
- move.l _modtable,a1
- add.l #$8000,a1
-
- andi.b #$0e,d0
- ori.b #$20,d0
- move.l d0,d2
- move.l d1,d3
- add.l d2,d2
- addx.l d3,d3
- add.l d2,d0
- addx.l d3,d1
- swap d3
- swap d2
- move.w d2,d3
- clr.w d2
- add.l d2,d0
- addx.l d3,d1
-
- moveq #3,d4
- checkloop: andi.b #$0e,d0
- ori.b #$20,d0
- move.l d0,d2
- move.l d1,d3
- add.l d2,d2
- addx.l d3,d3
- add.l d2,d0
- addx.l d3,d1
- swap d3
- swap d2
- move.w d2,d3
- clr.w d2
- add.l d2,d0
- addx.l d3,d1
-
- move.l d1,d3
- swap d3
- move.b (a1,d3.w),d2
-
- cmp.b (a0)+,d2
- bne.s itiswrong
-
- dbf d4,checkloop
-
- moveq #1,d0
- bra.s exitthis
-
- itiswrong: moveq #0,d0
- exitthis: movem.l (sp)+,d2-d4
- rts
-
- _mirror: lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- lsr.w #1,d1
- roxl.w #1,d0
- rts
-